package com.leetcode.tree.recursion;

import com.leetcode.basic.TreeNode;

/**
 * @author Dennis Li
 * @date 2020/6/15 21:37
 */
public class IsSymmetric_101 {

    public boolean isSymmetric(TreeNode root) {
        if (root == null) return true;
        // 一定会有一次的延伸，而且比较的是两端，所以最开始的函数不适用，需要构造一个可以接收二元的函数
        return isSymmetric(root.left, root.right);
    }

    private boolean isSymmetric(TreeNode t1, TreeNode t2) {
        if (t1 == null && t2 == null) return true;
        if (t1 == null || t2 == null || t1.val != t2.val) return false;
        // 注意这里进行的是比较而不是对树结构的变换
        // 合取关系，只要有一个值不等则不满足
        return isSymmetric(t1.left, t2.right) && isSymmetric(t1.right, t2.left);
    }
}
